[Home] Python으로 돌아가기

함수와 메서드 - def, return, 변수, 인자, dir, help, 내포함수

[참조]

 

📖 목차

(1) 내장함수(built-in function)
(2) 함수와 메서드의 정의: def
(3) 매개변수와 인자
(4) 함수값 return
(5) mutable(변경 가능) 인자 vs immutable(변경 불가능) 인자
(6) opt를 사용한 default와 option 인자의 지정
(7) 인자의 개수가 정해지지 않을 때 *arg와 **kwargs
(8) 함수 내 함수
(9) 사용자 정의 함수로 저장한 파일을 import로 불러오기
(10) 내포함수(內包함수; 內for함수;comprehension function)

(1) 내장 함수 (Built-in Function)

파이썬에는 기본적으로 포함되어 바로 사용할 수 있는 다양한 내장 함수가 존재한다. 이러한 함수들은 수치 계산, 자료형 변환, 자료 구조 탐색 및 제어 등에 널리 사용되며, 프로그램의 간결성과 효율성을 높여준다.

아래는 자주 사용되는 일부 내장 함수와 그 사용 예이다.

abs(x) all(iterable) any(iterable) ascii(object)
bin(x) bool(x) bytearray(), bytes()
callable(x) chr(i) classmethod() compile() complex()
delattr() dict() 📌 dir() divmod(a, b)
enumerate(iterable) eval(expression) exec()
filter(function, iterable) float(x) 📌 format() 📌 f-string (formatted string literal)
globals()
hasattr(object, name) hash(object) 📌 help() hex(x)
id(object) input(prompt) int(x) isinstance(object, class) issubclass(sub, super) iter(object)
lambda len(iterable) list() locals()
map(function, iterable) max(), min()
next(iterator)
object() oct(x) open(file, mode) ord(char)
pow(a, b) print() property()
📌 range() repr(obj) reversed(seq) round(x)
set() setattr(obj, name, value) slice(start, stop, step) sorted(iterable) staticmethod() str(x) sum(iterable) super()
tuple() type(obj)
vars()
zip()
__import__()


(2) 함수와 메서드의 정의: def


1) 함수(Function)와 메서드(Method)의 차이

프로그래밍 언어에서 함수메서드는 모두 특정 작업을 수행하기 위한 코드 블록을 의미하지만, 사용되는 문맥과 호출 방식에서 차이가 존재한다.

즉, 함수는 독립적으로 사용할 수 있는 반면, 메서드는 객체와 함께 사용하는 객체 지향적 함수라고 할 수 있다.

파이썬에서 함수는 def 키워드를 사용하여 정의한다. 함수는 특정 작업을 수행하는 명령문 집합으로, 코드의 재사용성과 구조화를 돕는다.


2) 함수 정의의 기본 구조

Ex) 두 수를 더하는 함수

Ex) 반환값 없이 단순 출력

Ex) 인자가 없는 함수


(3) 매개변수와 인자

함수 정의와 호출 시 사용되는 값과 변수는 다음과 같이 구분된다.

...
function argument and parameter
출처: https://pynative.com/python-function-arguments/

Ex)

이 예시에서 t1, t2는 매개변수이며, 함수 호출 시 전달된 "hello", "python"은 인자이다. t2는 기본값을 가지므로 두 번째 인자를 생략할 수 있다.

요약


(4) 함수값 return

함수는 실행 결과를 반환하기 위해 return 문을 사용한다. 반환값은 하나일 수도 있고, 여러 개일 경우 튜플 형태로 반환된다. 함수는 return 문을 만나면 즉시 실행을 종료하고, 해당 값을 호출한 위치로 전달한다.

여러 개의 값을 반환하고자 할 경우, 쉼표로 구분하여 작성하면 튜플로 반환된다.


(5) mutable(변경 가능) vs immutable(변경 불가능) 인자

파이썬에서는 객체의 변경 가능 여부에 따라 자료형이 mutableimmutable로 구분된다.

함수 호출 시 mutable 객체를 인자로 전달하면, 함수 내부에서 해당 객체를 변경할 수 있으며, 그 변경 사항은 호출한 쪽에도 영향을 미친다.

반면, immutable 객체는 함수 내에서 값을 변경하더라도 원본에는 영향을 주지 않는다.


(6) 기본값(default) 및 선택적(optional) 인자 지정

함수를 정의할 때 인자에 기본값을 지정하면, 호출 시 해당 인자를 생략할 수 있다. 이러한 인자는 선택적 인자(optional parameter)라고도 하며, 함수의 유연성을 높여준다.

기본값이 지정된 인자는 반드시 기본값이 없는 인자 뒤에 와야 한다.

복잡한 수식에서 optional 인자는 함수 내부에서 조건문을 사용해 분기처리를 할 수 있다.

(7) 인자의 개수가 정해지지 않을 때 *args**kwargs

함수를 정의할 때 전달되는 인자의 개수가 고정되어 있지 않은 경우, 파이썬에서는 *args**kwargs를 사용하여 가변적인 개수의 인자를 받을 수 있다.


1) *args – 위치 인자(Non-keyword arguments)

*args는 함수에 전달되는 인자를 **튜플(tuple)** 형태로 받아들이며, 개수에 제한이 없다. 함수 내부에서는 일반적인 반복문을 통해 개별 인자에 접근할 수 있다.


2) **kwargs – 키워드 인자(Keyword arguments)

**kwargs는 키워드 형태로 전달되는 인자들을 **딕셔너리(dictionary)** 형태로 받아들인다. 함수 내부에서는 키(key)와 값(value) 쌍으로 인자를 처리할 수 있다.

출력


3) *args**kwargs의 혼용

함수 정의 시 *args**kwargs는 함께 사용할 수 있으며, 반드시 *args가 먼저, **kwargs가 뒤에 와야 한다.

출력


요약


(8) 함수 내 함수 (Nested Function)

파이썬에서는 하나의 함수 내부에 또 다른 함수를 정의할 수 있다. 이를 중첩 함수(nested function) 또는 내부 함수(inner function)라고 하며, 외부 함수의 일부 로직을 내부적으로 캡슐화하거나, 클로저(closure) 구조를 구현할 때 자주 사용된다.

내부 함수는 자신을 포함하고 있는 외부 함수의 변수에 접근할 수 있으며, 외부에서는 호출할 수 없다. 이러한 특징을 통해 **함수 내의 일시적인 계산**, **정보 은닉**, **코드 구조화** 등의 효과를 얻을 수 있다.

Ex)

결과

해설

이와 같이 중첩 함수는 임시적인 처리 또는 특정 조건 하에서만 유효한 로직을 정의할 때 유용하게 사용된다. 또한 데코레이터(decorator)와 같은 고급 기능의 구현에서도 핵심적인 역할을 수행한다.


(9) 사용자 정의 함수로 저장한 파일을 import로 불러오기

사용자가 직접 정의한 함수를 하나의 파이썬 파일(.py)로 저장해 두고, 이후 다른 파이썬 파일에서 import 문을 통해 해당 함수를 불러올 수 있다. 이러한 방식은 코드의 재사용성과 모듈화를 가능하게 하며, 협업 및 대규모 프로젝트 구성에도 효과적이다.


1) 함수 정의 파일 예시


2) import를 통한 함수 불러오기

다른 파이썬 파일 또는 인터프리터 환경에서 import 또는 from ... import ... 구문을 통해 함수를 사용할 수 있다.


3) 모듈의 위치

모듈 파일은 같은 디렉토리에 있거나, PYTHONPATH 환경 변수 또는 sys.path에 등록된 경로 내에 존재해야 import가 가능하다.


4) 별칭(alias) 사용

이와 같이 사용자 정의 함수 파일을 외부에서 모듈로 불러와 사용할 수 있으며, 복잡한 코드 구조를 기능별로 나누어 관리할 수 있다.


(10) 내포함수(內包함수; 內for함수;comprehension function)

파이썬의 내포(comprehension) 함수는 컬렉션 자료형(리스트, 튜플, 집합, 딕셔너리 등)을 보다 간결하고 직관적인 문법으로 생성할 수 있도록 하는 표현식이다. 기존의 반복문과 조건문을 한 줄로 표현함으로써 코드의 가독성을 높이며, 간단한 자료 구조를 선언할 때 유용하게 활용된다.

내포 함수를 활용하면 반복문과 조건문을 간결하게 표현할 수 있으며, 동일한 결과를 더 적은 코드로 구현할 수 있다. 특히 리스트나 딕셔너리 생성 시 자주 사용된다.

내포 함수는 주로 리스트 내포(list comprehension), 딕셔너리 내포(dictionary comprehension), 집합 내포(set comprehension), 제너레이터 표현식(generator expression)으로 구분된다.


1) 리스트 내포 (List Comprehension)


2) 딕셔너리 내포 (Dictionary Comprehension)


3) 집합 내포 (Set Comprehension)


4) 제너레이터 표현식 (Generator Expression)

튜플 내포는 명시적으로 존재하지 않지만, 제너레이터 표현식을 사용하여 유사한 동작을 수행할 수 있다.